package com.huike.stock_analysis.service;


import java.text.DecimalFormat;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;


import com.huike.stock_analysis.dao.FinanceDao;
import com.huike.stock_analysis.entity.ProfitInfo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 
 * @author mzLEI
 * @date 2020年7月2日
 */
/*
 * 盈利能力service
 */



@Service
public class ProfitService {
	//注入dao
	@Autowired
	private FinanceDao financeDao;
	
	//保存数据库查询到的数据
	private List<ProfitInfo> profitInfos;
	//保留四位小数
	private DecimalFormat df = new DecimalFormat("0.0000");
	
	private void setList(String code) {
		
			profitInfos = financeDao.queryProfit(code);
		
	}
	
	/**
	 * 
	 * @param code
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  查询营业利润率
	 */
	public Map<String, String> profitRatio(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		
		setList(code);
		
		//遍历查询结果 找到营业利润率
		for(ProfitInfo profitInfo : profitInfos) {
			//System.out.print(profitInfo.getDate());
			//封装营业利润率 平均同行营业利润率
			
			
				map.put(profitInfo.getDate().toString(),df.format(profitInfo.getProfitRatio()) + ',' + df.format(profitInfo.getProfitRatioOfSame()));
			
		}
		return map;
	}
	
	/**
	 * 
	 * @param 
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  净资产收益率
	 */
	public Map<String, String> netAssetsIncomRatio(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		//遍历查询结果 净资产收益率
		for(ProfitInfo profitInfo : profitInfos) {
			//System.out.print(profitInfo.getDate());
			map.put(profitInfo.getDate().toString(), df.format(profitInfo.getNetAssetsIncomRatio()) + "," + df.format(profitInfo.getNetAssetsIncomRatioOfSame()));
		}
		return map;
	}
	
	/**
	 * 
	 * @param 
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  营业收入 结果单位是万元
	 */
	public Map<String, String> mainBusinessIncome(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		//遍历查询结果
		for(ProfitInfo profitInfo : profitInfos) {
			//System.out.print(profitInfo.getDate());
			map.put(profitInfo.getDate().toString(), df.format(profitInfo.getMainBusinessIncome() / 10000) + "," + df.format(profitInfo.getMainBusinessIncomeOfSame() / 10000) );
		}
		return map;
	}
	
	/**
	 * 
	 * @param 
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  每股收益
	 */
	public Map<String, String> perShareProfit(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		//遍历查询结果
		for(ProfitInfo profitInfo : profitInfos) {
			//System.out.print(profitInfo.getDate());
			map.put(profitInfo.getDate().toString(), df.format(profitInfo.getPerShareProfit()) + "," + df.format(profitInfo.getPerShareProfitOfSame())+
					"," + df.format(profitInfo.getPerNetAssets()));
		}
		return map;
	}
	
	/**
	 * 
	 * @param 
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  每股净资产
	 */
	/*
	public Map<String, String> perNetAssets(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		//遍历查询结果
		for(ProfitInfo profitInfo : profitInfos) {
			//System.out.print(profitInfo.getDate());
			map.put(profitInfo.getDate().toString(), df.format(profitInfo.getPerNetAssets()));
		}
		return map;
	}
	*/
	
	/**
	 * 
	 * @param 
	 * @return Map<String, String> 返回的数据 k为日期 v为对应的数据
	 *  净利润 结果单位是万元
	 */
	public Map<String, String> netProfit(String code) {
		//创建返回map
		Map<String, String> map = new LinkedHashMap<>();
		setList(code);
		
		//遍历查询结果 
		for(ProfitInfo profitInfo : profitInfos) {
			//System.out.print(profitInfo.getDate());
			map.put(profitInfo.getDate().toString(), df.format(profitInfo.getNetProfit() / 10000) + "," +  df.format(profitInfo.getNetProfitOfSame() / 10000));
		}
		return map;
	}
	
	/**
	 * 
	 * @param 
	 * @return String 最近的一个数据
	 *  销售毛利率
	 */
	public String grossProfitRatio(String code) {
		//获取最近一个
		setList(code);
		ProfitInfo profitInfo = profitInfos.get(profitInfos.size() - 1);
		return df.format(profitInfo.getGrossProfitRatio());
	}
	
	/**
	 * 
	 * @param 
	 * @return String 最近的一个数据
	 *  销售净利率
	 */
	public String grossNetProfitRatio(String code) {
		//获取最近一个
		setList(code);
		ProfitInfo profitInfo = profitInfos.get(profitInfos.size() - 1);
		return df.format(profitInfo.getGrossNetProfitRatio());
	}
	
	/**
	 * 
	 * @param 
	 * @return String 最近的一个数据
	 *  成本利润率
	 */
	public String costProfitRatio(String code) {
		//获取最近一个
		setList(code);
		ProfitInfo profitInfo = profitInfos.get(profitInfos.size() - 1);
		return df.format(profitInfo.getCostProfitRatio());
	}
	
	/**
	 * 
	 * @param 
	 * @return String 最近的一个数据
	 *  盈余现金保障倍数
	 */
	public String leftCashTime(String code) {
		//获取最近一个
		setList(code);
		ProfitInfo profitInfo = profitInfos.get(profitInfos.size() - 1);
		return df.format(profitInfo.getLeftCashTime());
	}
	
	

}
